package com.czb.czbmybatis.sqlsession;

import java.lang.reflect.Proxy;

/**
 * @author: 陈正彬
 * 搭建Configuration（连接）和Executor之间的桥梁
 * 这里操作DB的方法，就举例一个
 */
public class CzbSqlSession {
    private CzbExecutor executor = new CzbExecutor();
    private CzbConfiguration configuration = new CzbConfiguration();

    //编写方法SelectOne，返回一条记录(做了简化)
    public <T> T selectOne(String statement, Object parameter) {
        return executor.query(statement,parameter);
    }


    /**
     * 返回mapper的代理对象
     * 当执行接口方法时（通过代理对象调用），根据动态代理机制会执行到CzbMapperProxy-invoke方法
     * @param clazz
     * @return
     * @param <T>
     */
    public <T> T getMapper(Class<T> clazz) {
        return (T) Proxy.newProxyInstance(clazz.getClassLoader(),new Class[]{clazz},
                new CzbMapperProxy(this, clazz, configuration));
    }
}
